/**
 * 表单
 */
function FormModule(ui, engine) {
	this.base = Module;
	this.base(ui, engine);
	this.updated = false;// 数据更新状态
	this.ui.validate(this.setValidatecfg());
}

FormModule.prototype = new Module();

FormModule.prototype.validate = function() {
	return false;
};

FormModule.prototype.alert = function() {

};

FormModule.prototype.isOk = function() {
	return true;
};

FormModule.prototype.reload = function() {
	console.log("重新加载表单……");
};

FormModule.prototype.submit = function() {
	console.log('执行表单提交');
	this.ui.submit();
};

FormModule.prototype.setValidatecfg = function() {
	var formModule = this;
	$.extend(jQuery.validator.messages, {
		required : "必填",
		remote : "已存在",
		email : "请输入正确格式的电子邮件",
		url : "请输入合法的网址",
		date : "请输入合法的日期",
		dateISO : "请输入合法的日期 (ISO).",
		number : "请输入合法的数字",
		digits : "只能输入整数",
		creditcard : "请输入合法的信用卡号",
		equalTo : "请再次输入相同的值",
		accept : "请输入拥有合法后缀名的字符串",
		maxlength : jQuery.validator.format("请输入一个 长度最多是 {0} 的字符串"),
		minlength : jQuery.validator.format("请输入一个 长度最少是 {0} 的字符串"),
		rangelength : jQuery.validator.format("请输入 一个长度介于 {0} 和 {1} 之间的字符串"),
		range : jQuery.validator.format("请输入一个介于 {0} 和 {1} 之间的值"),
		max : jQuery.validator.format("请输入一个最大为{0} 的值"),
		min : jQuery.validator.format("请输入一个最小为{0} 的值")
	});

	// 解决相同name的input只教验第一个bug，要求：name 相同的 input id 必须不同
	if ($.validator) {
		// fix: when several input elements shares the same name, but
		// has different id-ies....
		$.validator.prototype.elements = function() {
			var validator = this, rulesCache = {};
			// select all valid inputs inside the form (no submit or
			// reset buttons)
			// workaround $Query([]).add until
			// http://dev.jquery.com/ticket/2114 is solved
			return $([])
					.add(this.currentForm.elements)
					.filter(":input")
					.not(":submit, :reset, :image, [disabled]")
					.not(this.settings.ignore)
					.filter(
							function() {
								var elementIdentification = this.id
										|| this.name;
								!elementIdentification
										&& validator.settings.debug
										&& window.console
										&& console
												.error(
														"%o has no id nor name assigned",
														this);
								// select only the first element for each name,
								// and only
								// those with rules specified
								if (elementIdentification in rulesCache
										|| !validator.objectLength($(this)
												.rules()))
									return false;
								rulesCache[elementIdentification] = true;
								return true;
							});
		};
	}

	var validateConf = {
		errorPlacement : function(error, element) {// error:存放错误信息的jquery对象
			// element:当前被校验元素的jquery对象
			if (element.attr("type") != 'checkbox') {// 非checkbox
				element.next().remove();// 删除原有的状态小图标
				element
						.after('<span class="glyphicon glyphicon-remove form-control-feedback" aria-hidden="true"></span>');// 追加错误提示小图标
				element.closest('.form-content').removeClass("has-success")
						.addClass('has-error has-feedback');// 给父元素追加错误样式class
			}
			element.closest('.form-content').tooltip('destroy');// 为父元素销毁提示工具
			element.closest('.form-content').tooltip({// 为父元素激活提示工具
				placement : 'right',// 提示工具出现的位置，可选值（top | bottom | left |
				// right）
				title : error.html(),// 提示内容
				container : '.tooltip-danger',// 错误信息存放容器
			});
		},
		success : function(label, element) {// label:默认的error label jquery对象
			// element:当前被校验元素的dom对象
			if ($(element).attr("type") != 'checkbox') {// 非checkbox
				$(element).next().remove();// 删除原有的状态小图标
				$(element)
						.after(
								'<span class="glyphicon glyphicon-ok form-control-feedback" aria-hidden="true"></span>');// 追加校验通过小图标
				$(element).closest('.form-content').removeClass('has-error')
						.addClass("has-success");// 移除父元素错误样式class，追加校验通过样式class
			}
			$(element).closest('.form-content').tooltip('destroy');// 为父元素销毁提示工具
		},
		submitHandler : function() {
			formModule.validateSuccessHandle();
		}
	};

	return validateConf;
};

FormModule.prototype.validateSuccessHandle = function() {
	var action = ctxPath + "/jbpmService/engine/submitWork";
	var engine = this.engine;
	var todoId = this.engine.todoId;
	var workId = this.engine.workId;

	$.post(action, this.ui.serialize() + "&workId=" + workId + "&todoId="
			+ todoId, function(data) {

		console.log("提交表单后返回结果：" + data);

		var dataObj = Util.strToObj(data);

		if (dataObj) {
			if (dataObj.type == 'outcome') {
				engine.outComeModule.openSelector(dataObj);
			} else if (dataObj.type == 'actor') {
				// 选人
				engine.actorModule.openSelector(dataObj);
			} else if (dataObj.type == 'end') {
				dialog.alert(dataObj.message);
			} else {
				dialog.alert("提交异常！");
			}
		} else {
			dialog.alert("提交异常！");
		}
	});
};

FormModule.prototype.save = function() {
	console.log("保存表单");
	var action = ctxPath + "/jbpmService/work/saveWork";
	var workId = this.engine.workId;
	$.post(action, $("form").serialize() + "&workId=" + workId, function(data) {
		dialog.alert(data.desc);
	});
};
